// Particle3D class Particle3D = function (material ) { THREE_IMWEB.Particle.call( this, material ); //this.material = material instanceof Array ? material : [ material ]; // define properties this.velocity = new THREE_IMWEB.Vector3(0,-8,0); this.velocity.rotateX(randomRange(-45,45)); this.velocity.rotateY(randomRange(0,360)); this.gravity = new THREE_IMWEB.Vector3(0,0,0); this.drag = 1; // methods... }; Particle3D.prototype = new THREE_IMWEB.Particle(); Particle3D.prototype.constructor = Particle3D; Particle3D.prototype.updatePhysics = function() { this.velocity.multiplyScalar(this.drag); this.velocity.addSelf(this.gravity); this.position.addSelf(this.velocity); } var TO_RADIANS = Math.PI/180; THREE_IMWEB.Vector3.prototype.rotateY = function(angle){ cosRY = Math.cos(angle * TO_RADIANS); sinRY = Math.sin(angle * TO_RADIANS); var tempz = this.z;; var tempx = this.x; this.x= (tempx*cosRY)+(tempz*sinRY); this.z= (tempx*-sinRY)+(tempz*cosRY); } THREE_IMWEB.Vector3.prototype.rotateX = function(angle){ cosRY = Math.cos(angle * TO_RADIANS); sinRY = Math.sin(angle * TO_RADIANS); var tempz = this.z;; var tempy = this.y; this.y= (tempy*cosRY)+(tempz*sinRY); this.z= (tempy*-sinRY)+(tempz*cosRY); } THREE_IMWEB.Vector3.prototype.rotateZ = function(angle){ cosRY = Math.cos(angle * TO_RADIANS); sinRY = Math.sin(angle * TO_RADIANS); var tempx = this.x;; var tempy = this.y; this.y= (tempy*cosRY)+(tempx*sinRY); this.x= (tempy*-sinRY)+(tempx*cosRY); } // returns a random number between the two limits provided function randomRange(min, max) { return ((Math.random()*(max-min)) + min); }